//创建链接
var MongoClient = require('mongodb').MongoClient;
//mongodb数据库的url(包括数据库的名称hellom)
let dbName = "starbucks"
var url = "mongodb://localhost:27017/" + dbName;

//查找文档
function find(collection, myObj) {
    //collection    数据库中的集合名称
    //myObj  是一个对象
    return new Promise((res, rej) => {
        MongoClient.connect(url, function(err, db) {
            if (err) throw err;
            var dbo = db.db(dbName);
            dbo.collection(collection).find(myObj).toArray(function(err, result) { // 返回集合中所有数据
                if (err) throw err;
                // console.log("查找成功");
                res(result)
                db.close();
            });
        });
    })
}

//插入文档
function insert(collection, myobj) {
    //collection    数据库中的集合名称
    //myObj  是插入的数据   {name:"张三",age:"18"}
    return new Promise((res, rej) => {
        MongoClient.connect(url, function(err, db) {
            if (err) throw err;
            var dbo = db.db(dbName);
            dbo.collection(collection).insertOne(myobj, function(err, result) {
                if (err) throw err;
                // console.log("文档插入成功");
                res(result)
                db.close();
            });

        });
    })
}

//修改文档
function update(collection, condition, updateObj) {
    //collection    数据库中的集合名称
    //condition  是查询的条件   {name:"张三",age:"18"}
    //updateObj  是修改的属性   {name:"张三",age:"18"}
    return new Promise((res, rej) => {
        MongoClient.connect(url, function(err, db) {
            if (err) throw err;
            var dbo = db.db(dbName);
            dbo.collection(collection).updateOne(condition, {
                $set: updateObj
            }, function(err, result) {
                if (err) throw err;
                // console.log("文档修改成功");
                res(result)
                db.close();
            });

        });
    })
}

//删除文档
function del(collection, condition) {
    //collection    数据库中的集合名称
    //condition  是删除的条件   {name:"张三",age:"18"}
    return new Promise((res, rej) => {
        MongoClient.connect(url, function(err, db) {
            if (err) throw err;
            var dbo = db.db(dbName);
            dbo.collection(collection).deleteOne(condition, function(err, result) {
                if (err) throw err;
                // console.log("文档删除成功");
                res(result)
                db.close();
            });

        });
    })
}

//模糊查询
function search(collection, cname, search) {
    //collection    数据库中的集合名称
    //cname  查询的字段
    //search    查询的关键字
    return new Promise((res, rej) => {
        MongoClient.connect(url, function(err, db) {
            if (err) throw err;
            var dbo = db.db(dbName);
            var myObj = {}
            myObj[cname] = {
                    $regex: search
                } //$regex 正则   $option 不区分大小写
            dbo.collection(collection).find(myObj).toArray(function(err, result) { // 返回集合中所有数据
                if (err) throw err;
                // console.log("查找成功");
                res(result)
                db.close();
            });
        });
    })
}

//分页
function skip(collection, pageSize, pageNum) {
    //collection    数据库中的集合名称
    //cname  查询的字段
    //search    查询的关键字
    return new Promise((res, rej) => {
        MongoClient.connect(url, function(err, db) {
            if (err) throw err;
            var dbo = db.db(dbName);
            //pageSize  每页获取的信息数量
            //page = (页数 - 1) * pageSize
            var page = (pageNum - 1) * pageSize
            dbo.collection(collection).find().limit(pageSize).skip(page).toArray(function(err, result) { // 返回集合中所有数据
                if (err) throw err;
                // console.log("查找成功");
                res(result)
                db.close();
            });
        });
    })
}

//暴露
module.exports = {
    find,
    insert,
    update,
    del,
    search,
    skip
}